【IICS】マッピングのパラメータに現在日付を指定する方法
はじめに
データアナリティクス事業本部ビッグデータチームのyosh-kです。
前回、IICS CDIのマッピング作成時にソースタイプにクエリを選択し、クエリの中でパラメータを使用できないか検討しましたが、今回は、そのパラメータに現在日付を設定していきたいと思います。
IICS CDI Mappingでクエリ選択時にパラメータを使用する方法
前提条件
- 設定は前回のブログと同様ですので、割愛させていただきます。
- Redshift tableには、現在の日付を指定するため、
flight_date
カラムがブログ執筆日付の2023-06-03
のレコードを用意します。
INSERT INTO public.flightdata( select '2023-06-03', flight_number, origin_city, origin_state, destination_city, destination_state, departure_delay, arrival_delay, cancelled, diverted, air_time, distance, distance_group, carrier_delay, weather_delay, security_delay, late_aircraft_delay, origin_airport_name, cancellation_reason, destination_airport_name, carrier_name from public.flightdata limit 10 )
結論
結論から言いますと、データタスクの入力フィールドに、該当のパラメータを指定し、式の中で以下の設定をすることで、JSTの現在日付を取得することが可能です。
fn:substring(fn:string(fn:adjust-dateTime-to-timezone(fn:current-dateTime(), xs:dayTimeDuration("PT9H"))) , 1, 10)
設定内容の確認
設定内容の確認のため、テスト用のパラメータをマッピングから作成し、割り当てステップで出力を確認していきます。
fn:current-dateTime
公式的なIICSのドキュメントは見つけることはできませんでしたが、IICS Knowledgeから現在の日付と時刻を、サーバーの暗黙的なタイムゾーンで返していると想定しています。
- HOW TO change the timezone of the time returned by fn:current-dateTime() in ICAI (ICRT)?
- Convert time into 24 hour clock using fn:current-dateTime() in Application integration process
マッピング実行結果のペイロードからも日本時間2023-06-03T18:55
から-9時間されたUTC時間2023-06-03T09:55:18.003Z
であることを確認しています。
fn:adjust-dateTime-to-timezone
fn:adjust-dateTime-to-timezone(arg, timezone)
については、こちらも公式ドキュメントを見つけられませんでしたが、IICS Knowledgeから読み解くと、arg
にdatetime型の値を指定し、timezone
でxs:dayTimeDuration
型の値を指定することで、与えられた日時を指定されたタイムゾーンに変換するために使用されます。xs:dayTimeDuration
は、XML Schemaで定義されたデータ型の1つです。これは、期間を表現するために使用されます。具体的には、時間、分、秒を表す値を持ちます。
xs:dayTimeDuration
は、以下の形式で表現されます:
PnDTnHnMnS
ここで、nは数値を表し、以下の要素が含まれます:
P: 期間を示すことを示すプレフィックス D: 日数 T: 時間を示すことを示すセパレータ H: 時間 M: 分 S: 秒
例えば、PT5H30M
は、5時間30分の期間を表し、UTCはPT0H
、JSTはPT9H
となります。
- HOW TO: Covert the time to a different time zone in IICS Advance Taskflow
- HOW TO: Convert DateTime Property to Different Time Zone using XQuery in Cloud Application Integration (CAI)
- fn:adjust-dateTime-to-timezone 関数
想定通り、日本時間のcurrent_timeが出力されています。
fn:stringとfn:substring
fn:string
とfn:substring
についても公式な記載は見つけられませんでしたが、以下の認識でいます。
fn:string(arg)
: argをstring型に変換fn:substring(sourceString, startingLoc, length)
:sourceStringで検索したい文字列を、startingLocで開始位置を、lengthで開始位置からの数を指定し、値を抽出
今回の用途として、これまでに取得した、datetime型の値をstringに変換し、その中から日付箇所だけを抽出するため、以下の設定とします。
想定通り、JSTの日付型で取得できています。
実行結果
最後にデータタスクの入力パラメータに、作成した式を入力し、ジョブを実行してみます。
date_paramsが現在日付の2023-06-03"
となり出力されています。レコード件数も10件なので想定通りです。
CSVファイルの出力も確認
最後に
fn:current-dateTime
の値はおそらく、サーバー上の時間だと思いますので、もしサーバー上の時間がJSTである場合は、fn:adjust-dateTime-to-timezone
処理は不要であると思います。このブログが少しでも誰かの役に立てば幸いです。